import java.util.ArrayList;
import java.util.List;

public class 迭代器模式 {
    public static void main(String[] args) {
        ConcreteAggregate<String> aggregate = new ConcreteAggregate<>();
        aggregate.addItem("Element 1");
        aggregate.addItem("Element 2");
        aggregate.addItem("Element 3");
        Iterator<String> iter=aggregate.createIterator();
        while(iter.hasNext())
        {
            System.out.println(iter.next());
        }
    }
}
// 定义迭代器接口
interface Iterator<T> {
    boolean hasNext(); // 检查是否还有下一个元素
    T next();          // 获取下一个元素
}
// 定义集合接口
interface Aggregate<T> {
    Iterator<T> createIterator(); // 创建迭代器
}
//// 具体集合类
class ConcreteAggregate<T> implements Aggregate<T> {
    private final List<T> items = new ArrayList<>(); // 使用 ArrayList 存储集合元素

    // 添加元素到集合
    public void addItem(T item) {
        items.add(item);
    }
    // 获取集合中的元素
    public List<T> getItems()
    {
        return items;
    }
    // 创建具体迭代器
    @Override
    public Iterator<T> createIterator() {
        return new ConcreteIterator<>(this);
    }
}
class ConcreteIterator<T>  implements Iterator<T> {
    private final ConcreteAggregate<T> aggregate; // 引用集合对象
    private int index = 0;
    public ConcreteIterator(ConcreteAggregate<T> aggregate) {
        this.aggregate = aggregate;
    }
    @Override
    public boolean hasNext() {
        return index < aggregate.getItems().size();
    }

    @Override
    public T next() {
        return aggregate.getItems().get(index++);
    }
}